#ifndef HEAPNODE_HPP_
#define HEAPNODE_HPP_

template<class T>
class heapNode
{
public:

	heapNode();

	heapNode(const T);
	
	~heapNode();

	heapNode<T>*
	getDaddy();

	void
	setDaddy( heapNode<T>* );

	heapNode<T>*
	getFirstSon();

	void
	setFirstSon( heapNode<T>* );

	heapNode<T>*
	getSecSon();

	void
	setSecSon( heapNode<T>* );

	T
	getInfo();

	void
	setInfo( const T );

protected:



private:

	heapNode<T>*
	daddy;

	heapNode<T>*
	firstSon;

	heapNode<T>*
	secSon;
	
	T
	info;
};

/*******************************
 * 
 *   Implementations
 * 
 * *****************************/

template<class T>
heapNode<T>::heapNode()
{
	this->daddy = 0;
	this->firstSon = 0;
	this->secSon = 0;
}

template<class T>
heapNode<T>::heapNode( const T _info)
{
	this->daddy = 0;
	this->firstSon = 0;
	this->secSon = 0;
	
	this->info = _info;
	
}

template<class T>
heapNode<T>::~heapNode()
{
	
}

template<class T> heapNode<T>*
heapNode<T>::getDaddy()
{
	return this->daddy;
}

template<class T> void
heapNode<T>::setDaddy( heapNode<T>* _daddy )
{
	this->daddy = _daddy;
}

template<class T> heapNode<T>*
heapNode<T>::getFirstSon()
{
	return this->firstSon;
}

template<class T> void
heapNode<T>::setFirstSon( heapNode<T>* _son)
{
	this->firstSon = _son;
}

template<class T> heapNode<T>*
heapNode<T>::getSecSon()
{
	return this->secSon;
}

template<class T> void
heapNode<T>::setSecSon( heapNode<T>* _son)
{
	this->secSon = _son;
}

template<class T> T
heapNode<T>::getInfo()
{
	return this->info;
}

template<class T> void
heapNode<T>::setInfo( const T _info )
{
	this->info = _info;
}

#endif /*HEAPNODE_HPP_*/
